import { LocalStorageMgr } from "../Mgr/LocalStorageMgr";
import type ServiceAPI from "../src/api/service.api";

// 定义属性的接口，描述 UserData 中所有的属性
interface IUserData {
    /** 用户id */
    userId: number;
    /** 设备id */
    deviceId: string;
    /** 国家代码 */
    country: string;
    /** 语言信息 */
    language: string;
    /** 是否新手 */
    isCommer: boolean;
    /** 引导记录 */
    guideRecord: number;
    /** 强弹全屏次数*/
    fullscTimes: number;
    /** 过关累计次数 */
    passLevelTimes: number;
    /** 临时过关累计次数-判断抽奖 */
    tempPassLevelTimes_lottery: number;
    /** 临时过关累计次数-判断幸运弹窗 */
    tempElimiTimes_lucky: number;
    /** 当前抽奖次数 */
    curlotteryTimes: number;
    /** 当前达成抽奖次数 */
    curGetLotteryTimes: number;
    /** 当前抽奖机会 */
    curlotteryChance: number;
    /** 道具数量 */
    propNum: number;
    /** 当前关卡 */
    curLevel: number;
    /** 当前现金总数 */
    curCashTotal: number;
    /** 红包数 */
    redPacket: number;
    /** 累计抽奖次数 */
    drawTotal: number;
    /** 普通领取红包次数 */
    luckyWardNorgetTimes: number;
    /** 新人奖励 */
    newCommerReward: Awaited<ReturnType<typeof ServiceAPI.GetNewComerReward>>
}

export class UserData {

    private static _data: Partial<IUserData> = {};
    public static data = new Proxy(UserData._data, {
        get(target, prop: keyof IUserData) {
            if (target[prop] === undefined || target[prop] === null) {
                //@ts-ignore
                target[prop] = LocalStorageMgr.getItem<IUserData[keyof IUserData]>(prop as string) ?? null;
            }
            return target[prop];
        },
        set(target, prop: keyof IUserData, value) {
            //@ts-ignore
            target[prop] = value;
            LocalStorageMgr.setItem(prop as string, value);
            return true;
        }
    }) as IUserData;

}


